<?php

namespace App\Services;


use App\Models\Article;
use App\Models\Conditions\ArticleCondition;
use DB;

class ArticleService
{

    /**
     * 获取所有的文章
     * @return \Illuminate\Database\Eloquent\Collection|\App\Models\Article[]
     */
    public function getAllArticles()
    {
        return Article::with('articleCategory')->get();
    }

    /**
     * 保存文章
     * @param $attr
     * @return \App\Models\Article
     */
    public function saveArticle($attr)
    {
        return Article::create($attr);
    }

    /**
     * 通过Id获取文章
     * @param $id
     * @return \App\Models\Article
     */
    public function getArticleById($id)
    {
        return Article::find($id);
    }

    /**
     * 通过Id更新文章
     * @param $id
     * @param $attr
     * @return bool|int
     */
    public function updateArticleById($id, $attr)
    {
        return $this->getArticleById($id)->update($attr);
    }

    /**
     * 通过Id删除文章
     * @param $id
     * @return int
     */
    public function deleteArticleById($id)
    {
        return Article::destroy($id);
    }

    /**
     * 通过Id数组删除文章
     * @param $ids
     */
    public function deleteArticleByIds($ids)
    {
        if (!empty($ids)) {
            DB::transaction(function () use ($ids) {
                return Article::destroy($ids);
            });
        }
    }

    /**
     * 通过条件分页查询文章
     * @param ArticleCondition $articleCondition
     * @param int $pageLimit
     * @return \App\Models\Article[]
     */
    public function getArticlesByPageAndCondition(ArticleCondition $articleCondition, $pageLimit = 10)
    {
        return Article::ofTitle($articleCondition->title)->ofCategory($articleCondition->article_category_id)
            ->with('articleCategory')->paginate($pageLimit);
    }

}